package com.hong.concurrent.chapter1;

/**
 * 针对多次new对象的多线程问题解决
 * 1.解决方案一加上：synchronized 同步
 *      问题会造成性能问题
 * 2.通过类锁synchronized（class）来解决性能问题
 *      分析：假定有两个线程同时进入null==instance 其中一个线程抢到了synchronized (SingletonObject4.class)这个类锁，另外一个线程在等待
 *           前面的线程处理完后释放锁，后面的线进再去判断if(null==instance)不成立就走了。
 *      问题:存在一个隐患
 *
 */
public class SingletonObject4 {

    //对象
    private static SingletonObject4 instance;

    private SingletonObject4(){
        //empty
    }
    //获取对象
    public static SingletonObject4 getInstance() {

        if(null==instance){
            synchronized (SingletonObject4.class){
                if(null==instance)
                    instance = new SingletonObject4();
            }
        }
        return instance;
    }
}
